// permission.js文件其实就是路由导航守卫的抽离的单独的模块,后期自己写
// 路由导航守卫(路由钩子)
import router from '@/router/index'
import store from '@/store'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

const whiteList = ['/404', '/login'] // 3,没有登录的情况下可以去的页面装在数组里
// to 和 from 是 路由信息对象
// next('/') 等价于 this.$router.push('/')
// this.$router.push({ path: '/', qurey: { a: 10 }})
// next({path:'/'},query:{a:10})
router.beforeEach(async(to, from, next) => {
  nprogress.start() // 开启进度条
  const token = store.getters.token // 一定放在导航守卫内获取
  // 1,先判断是否有token,如果有token,还要去登录页面,强制去首页
  if (token) {
    if (to.path === '/login') {
      next('/')
      // 被next强制拦截的页面是不会进入到后置导航守卫中的,需要手动关闭进度条
      nprogress.done()
      // 2,登录后,获取到个人信息后想去哪就去哪
    } else {
      // 权限系统:目前的情况 登录成功过后=>跳转到了页面=>在首页的某个组件内获取到个人信息
      // 改造后的结果 登陆成功后=>在进入到首页之前获取到用户信息(个人信息中是包含权限)
      // 在放行之前,先获取个人信息
      if (!store.getters.name) { // 判断是否有个人信息,有的话就不再发送请求
        await store.dispatch('user/getUserInfo') // 挖坑--权限功能 个人信息中roles.merus是当前用户的权限列表
      }
      // console.log('111')
      next()
    }
  } else {
    // 3,没有登录情况
    // if (whiteList.indexOf(to.path) !== -1) {  方法一
    if (whiteList.includes(to.path)) { // 方法二
      next()
    } else {
      // 没有登录访问有权限的页面 强制去登录
      next('/login')
      // 被next强制拦截的页面是不会进入到后置导航守卫中的,需要手动关闭进度条
      nprogress.done()
    }
  }
})
// 后置导航守卫
router.afterEach((to, from) => {
  // 关闭进度条
  nprogress.done()
})
